<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="../js/vue.js"></script>
</head>


<body>

    <!-- 
    vue中使用组件的三大步骤:
    1.定义组件 2.注册组件 3，使用组件

    如何定义组件：
    使用Vue.extend(options)创建，其中options和new Vue(options)中传入的options几乎一样，区别如下:

    1.el不要写 ，最终所有组件都由vm管理，由vm中的el决定管理哪个容器
    2.data必须写成函数，避免组件被复用时，数据存在引用关系
    使用template可以配置组件结构

    二、如何注册组件
    1.全局注册：靠Vue.component('组件名',组件)
    1.局部注册：靠new Vue时传入component选项

    三、编写组件标签
    1.<school></school>
 -->


    <div id="root">
        <h1>{{msg}}</h1>
        <school></school>
        <hr>
        <student></student>
        <hr>
        <hello></hello>
    </div>

</body>
<script>
    Vue.config.productionTip = false

    // 这是一个创建非单文件组件的基本例子
    const b = Vue.extend({
        template: `
        <div>
        <h2>学生的名字是:{{studentName}}</h2>
        <h2>学生的性别是:{{sex}}</h2>
        </div>
        `
        ,
        data() {
            return {
                studentName: '余逍遥',
                sex: '男'
            }
        }
    })

    const a = Vue.extend({
        template: `
        <div>
        <h2>学校的名字是:{{schoolName}}</h2>
        <h2>学校的地址是:{{address}}</h2>
        </div>
        `
        ,
        data() {
            return {
                schoolName: '重邮',
                address: '南山',
            }
        }


    })

    const c = Vue.extend({
        template: `
        <div>
        <h1>我是一个全局组件哦!</h1>
        <h2>{{msg}}</h2>
        </div>
        `
        ,
        data() {
            return { msg: '你好啊' }
        }
    })

    // 全局组件 的注册方法后面直接跟上组件的名字
    //全局组件和局部组件在创建时是完全一样的写法，只是注册时不一样
    Vue.component('hello', c);


    new Vue({
        el: '#root',
        data: {
            msg: '写完了第一个组件练习!'
        }
        ,
        components: {
            // 这里如果组件的名字相同 可以简写 所以一开始就最好想好组件的名字
            student: b,
            school: a
        }
    })
</script>

</html>